
package br.praticas.projetoacademia.dao;


import br.praticas.projetoacademia.models.Instrutor;
import br.praticas.projetoacademia.models.Usuario;
import br.praticas.projetoacademia.util.HibernateUtil;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.classic.Session;

public class UsuarioDao {
     Session sessao = null;
 /**
 *
 * @abri a sensão, abrindo a conexão, metodo para adcionar um usuario no banco, salva e commit o usuario e fecha a sessão
 */
    public void add(Usuario usuario) {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();
        sessao.save(usuario);
        sessao.getTransaction().commit();
        sessao.close();
    }
    /**
 *
 * @abri a sensão, metodo para pesquisar um usuario no banco pelo id, commit o usuario e fecha a sessão
 */
    public Usuario getAluById(Long id) {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();
        Usuario p = (Usuario) sessao.get(Usuario.class, id);
        sessao.getTransaction().commit();
        sessao.close();
        return p;
    }
   /**
 *
 * @abri a sensão, metodo para atualizar um produto no banco, commit o produto e fecha a sessão
 */ 
    public void update (Usuario usuario){
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();
        sessao.update(usuario);
        sessao.getTransaction().commit();
        sessao.close();
    }
/**
 *
 * @abri a sensão, metodo para listar usuarios do banco, commit o usuario e fecha a sessão
 */
    public List<Usuario> list() {
         sessao = HibernateUtil.getSessionFactory().openSession();
        List<Usuario> lista = sessao.createCriteria(Usuario.class).list();
        sessao.close();
        return lista;
    }
/**
 *
 * @abri a sensão, metodo para remover um usuario no banco, deleta e commit o usuario e fecha a sessão
 */
    public boolean remove(Usuario usuario) {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();
        sessao.delete(usuario);
        sessao.getTransaction().commit();
        sessao.close();
        return true;
    }
    
    public Usuario buscarUsuario(int index) {
        List<Usuario> lista = new ArrayList<>();
        Usuario usuarioRetorno = null;
        lista = list();
        int cont = 0;
        for (Usuario usuario : lista) {
            if (cont == index) {
                usuarioRetorno = usuario;
                break;
            }
        }
        return usuarioRetorno;
    }
    
    
    public Session getSessao() {
        return this.sessao;
    }
}
